<?php
require_once(FWK_EXCEPTION."CustonException.class.php");
require_once(BIB_ACTIVE_RECORD);
require_once(FWK_MODEL."AbsModelDao.class.php");
require_once(FWK_UTIL."FormataDatas.class.php");
/**
 * Classe modelo para registro do voucher
 *
 * @author Vinicius Mendonca <viniciusmr3@gmail.com>
 * @since 1.0 - 27/11/2012
 */
class Voucher extends AbsModelDao{

	public $_table = "vouchers";

	public $_id = "id_voucher";

	public function getIdVoucher(){
    	return $this->id_voucher;
    }
    
	public function getHistoricoVendasPorUsuario($id_usuario){
		$strQuery = "SELECT
							id_vendas, id_usuario, cod_venda, data_venda, data_entrega,tipo, nome_cliente, valor_venda, 
							valor_reserva_tec, data_pgto_reserva_tec, data_registro
					 FROM ".$this->_table." WHERE id_usuario = ".$id_usuario." ORDER BY data_venda DESC, cod_venda ASC, nome_cliente ASC ";
		$arrRet = ControlDB::getAll($strQuery,3);
		return $arrRet;
	}
	
	public function getHistoricoVouchersEmitidos($id_usuario){
		$strQuery = "SELECT
							v.id_voucher, DATE_FORMAT(v.data_voucher, '%d/%c/%Y')  as data_voucher, p.titulo_premio, v.status_voucher, 
							p.pontos_premio, v.cod_voucher
					 FROM ".$this->_table." v INNER JOIN premios p ON (v.id_premio = p.id_premio)  
					 		WHERE id_usuario = ".$id_usuario."   ORDER BY v.data_voucher ASC  ";
		$arrRet = ControlDB::getAll($strQuery,3);
		return $arrRet;
	}
	
	public function getTotalPontosResgatados($id_usuario){
		$strQuery = "SELECT
							sum(p.pontos_premio)
					 FROM ".$this->_table." v INNER JOIN premios p ON (v.id_premio = p.id_premio)
					 	 
					 		WHERE v.status_voucher != 3 and id_usuario = ".$id_usuario;
		$arrRet = ControlDB::getRow($strQuery,3);
		return $arrRet;
	}
	
	public function buscaVoucherPorCodigoSeguranca($codigoSeguranca){
		$strQuery = "SELECT
							v.id_voucher, v.cod_voucher,v.validade_voucher, DATE_FORMAT(v.data_voucher, '%d/%c/%Y') as 'data_voucher', v.status_voucher, p.valor_premio,
							u.nome_usuario, u.cpf_usuario
					 FROM ".$this->_table." v INNER JOIN premios p ON (v.id_premio = p.id_premio)  
					 						  INNER JOIN usuario u ON (u.id_usuario = v.id_usuario)
					 		WHERE v.cod_voucher = ".$codigoSeguranca;
		$arrRet = ControlDB::getRow($strQuery,3);
		return $arrRet;
	}
	
	public function buscaVoucherPorFiltros($data, $descricao, $idCredenciado){
		$strQuery = "SELECT
							v.id_voucher, v.cod_voucher, v.validade_voucher, DATE_FORMAT(v.data_voucher, '%d/%c/%Y') as 'data_voucher', 
							DATE_FORMAT(v.data_validacao, '%d/%c/%Y') as 'data_validacao', v.status_voucher, p.valor_premio,
							u.nome_usuario, u.cpf_usuario, u.nome_usuario
					 FROM ".$this->_table." v INNER JOIN premios p ON (v.id_premio = p.id_premio)  
					 						  INNER JOIN usuario u ON (u.id_usuario = v.id_usuario)
					 						  INNER JOIN credenciados c ON (c.id_credenciado = p.id_credenciado)
					 		WHERE  v.status_voucher = 2 AND c.id_credenciado =  ".$idCredenciado;// v.cod_voucher = ".$codigoSeguranca;
		
		if($data != null)
			$strQuery .= " AND DATE_FORMAT(v.data_voucher, '%c%Y')    =  ".$data;
		
		if($descricao != null) {
			$strQuery .= "  AND (v.cod_voucher like '%".$descricao."%' OR u.nome_usuario like '%".$descricao."%' OR p.titulo_premio like '%".$descricao."%') ";
		}
		$arrRet = ControlDB::getAll($strQuery,3);
		return $arrRet;
	}
	
	public function buscaVoucherPorPremioUsuario($id_usuario, $id_premio){
		$strQuery = "SELECT
							v.id_voucher, v.data_voucher, p.titulo_premio, v.status_voucher, p.pontos_premio
					 FROM ".$this->_table." v INNER JOIN premios p ON (v.id_premio = p.id_premio)  
					 		WHERE v.id_usuario = ".$id_usuario." AND v.id_premio = ".$id_premio;
		$arrRet = ControlDB::getAll($strQuery,3);
		return $arrRet;
	}
	//1 - Emitido\n2 - Utilizado\n3 - Anulado
	public function getListaGrid($limitIni=0, $numRegs=15, $count=false){
		$strQuery = "SELECT ";
		if($count){
			$strQuery.= " count(id_voucher) ";
		}else{
			$strQuery .= "  v.id_voucher, v.cod_voucher as 'C&oacute;digo', 
							DATE_FORMAT(v.data_voucher, '%d/%c/%Y') as 'Emiss&atilde;o', 
							DATE_FORMAT(v.data_validacao, '%d/%c/%Y') as 'Valida&ccedil;&atilde;o', 
							p.valor_premio as 'Valor',
							c.nome_credenciado as 'Credenciado',
							if(v.status_voucher=1,'Emitido', if(v.status_voucher=2,'Utilizado','Anulado')) as 'Status',
							u.nome_usuario as 'Usu&aacute;rio' ";
		}
		$strQuery .=  "
					 FROM ".$this->_table." v INNER JOIN premios p ON (v.id_premio = p.id_premio)  
					 						  INNER JOIN usuario u ON (u.id_usuario = v.id_usuario) 
					 						  INNER JOIN credenciados c ON (c.id_credenciado = p.id_credenciado)  
					 ORDER BY v.data_voucher desc ";
		if(!$count){
			$strQuery .= " LIMIT
								".$limitIni." ,".$numRegs;
		}
		$arrRet = ControlDB::getAll($strQuery,3);
		return $arrRet;
		
	}	
	
	public function getDataVouchersEmitidoCombo($idCredenciado){
		$strQuery = "SELECT
							distinct DATE_FORMAT(v.data_voucher, '%c%Y') as id, DATE_FORMAT(v.data_voucher, '%c/%Y') as descricao
					 FROM ".$this->_table." v INNER JOIN premios p ON (v.id_premio = p.id_premio)  
					 						  INNER JOIN usuario u ON (u.id_usuario = v.id_usuario)
					 						  INNER JOIN credenciados c ON (c.id_credenciado = p.id_credenciado)
					 		WHERE  v.status_voucher = 2 AND c.id_credenciado =  ".$idCredenciado;
		$arrRet = ControlDB::getAll($strQuery,3);
		return $arrRet;
	}

	
	public function getDadosCombo($id_credenciado){
		$strQuery = "SELECT
							id_credenciado, nome_credenciado
					 FROM 
					 		".$this->_table." v INNER JOIN premios p ON (v.id_premio = p.id_premio) 
 											    INNER JOIN credenciados c ON (c.id_credenciado = p.id_credenciado) 
					 		
					 		ORDER BY nome_credenciado asc ";
		$arrRet = ControlDB::getAll($strQuery,3);
		return $arrRet;
	}

	public function alterar($id=null,$post,$file = null){
		try{
			self::salvaPostAutoUtf8($post);
			$this->id_voucher = $id;
				
				
			//campos default para todos os daos (data registro)
			$this->data_voucher = date("Y-m-d H:i:s");
			self::replace();
			if(self::ErrorMsg()){
				print("<pre>");
				print_r($post);
				die("<br/><br /><h1>".self::ErrorMsg()."</h1>");
			}
		}catch(DaoException $e){
			throw new CustonException($e->getMensagem());
		}
	}
}
?>